<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/>
<title>mbox: xmbox_intr_example.c File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
  $(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="HTML_custom.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="xlogo_bg.png"/></td>
  <td style="padding-left: 0.5em;">
   <div id="projectname">mbox
   </div>
   <div id="projectbrief">Vitis Drivers API Documentation</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.5 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Overview</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li><a href="globals.html"><span>APIs</span></a></li>
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="pages.html"><span>Examples</span></a></li>
    </ul>
  </div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('xmbox__intr__example_8c.html','');});
</script>
<div id="doc-content">
<div class="header">
  <div class="summary">
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">xmbox_intr_example.c File Reference</div>  </div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2 class="groupheader">Overview</h2>
<div class="textblock"><p>This file contains a design example for using the Mailbox hardware and driver <a class="el" href="struct_x_mbox.html" title="The XMbox driver instance data. ">XMbox</a>. </p>
<p>This example attempts to send a known message through the mailbox from the processor identified as 0 (XPAR_CPU_ID=0) to the other processor. The message is received by the receiver and the test passes. Since the application is running on two separate processors, the initiator declares success when the message is sent and the receiver declares success when the message is received. There is no feedback to the initiator so a terminal is required for each processor to verify that the test passed for both sides.</p>
<p>The example assumes there are two processors availabile in the system that are expected to inter-communicate.</p>
<p>This example has been tested on ML505 Hardware Evaluation board.</p>
<dl class="section note"><dt>Note</dt><dd></dd></dl>
<p>These code fragments will illustrate how the <a class="el" href="struct_x_mbox.html" title="The XMbox driver instance data. ">XMbox</a> component can be used to:</p>
<ul>
<li>Initialize the Mailbox core.</li>
<li>pass data between two processors.</li>
</ul>
<pre>
  MODIFICATION HISTORY:</pre><pre>  Ver   Who  Date        Changes
</p>
<hr/>
<p>
  2.00a hm              Example that sends and receives and uses interrupts
  3.01a sdm  05/06/10   Cleanup for coding guidelines, removed printfs from all
                        the functions except the main function
  4.1   ms   01/23/17 Modified xil_printf statement in main function to
                      ensure that "Successfully ran" and "Failed" strings
                      are available in all examples. This is a fix for
                      CR-965028.
        ms   04/05/17 Added tabspace for return statements in functions for
                      proper documentation while generating doxygen and
                      modified filename tag to include the file in doxygen
                      examples.
  4.6   ht   07/07/23 Added support for system device-tree flow.
  4.9   ht   04/17/25 Update Canonical definition to be inline with xsct flow.
*</pre> </div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:adf6c143c65ce968f72fc282ec63280e8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xmbox__intr__example_8c.html#adf6c143c65ce968f72fc282ec63280e8">MailboxExample</a> (XIntc *IntcInstancePtr, u16 MboxDeviceId, u16 MboxIntrId)</td></tr>
<tr class="memdesc:adf6c143c65ce968f72fc282ec63280e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function sends a message to and receives a message from the other processor.  <a href="#adf6c143c65ce968f72fc282ec63280e8">More...</a><br/></td></tr>
<tr class="separator:adf6c143c65ce968f72fc282ec63280e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8906eefcbf88897e5608bc257daeec6f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xmbox__intr__example_8c.html#a8906eefcbf88897e5608bc257daeec6f">MailboxExample_Send</a> (<a class="el" href="struct_x_mbox.html">XMbox</a> *MboxInstancePtr, int CPU_Id, int Blocking)</td></tr>
<tr class="memdesc:a8906eefcbf88897e5608bc257daeec6f"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function sends the hello message to the other processor.  <a href="#a8906eefcbf88897e5608bc257daeec6f">More...</a><br/></td></tr>
<tr class="separator:a8906eefcbf88897e5608bc257daeec6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a82d99e5d2c3904a519d03a588ba9e1d8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xmbox__intr__example_8c.html#a82d99e5d2c3904a519d03a588ba9e1d8">MailboxExample_Receive</a> (<a class="el" href="struct_x_mbox.html">XMbox</a> *MboxInstancePtr, int CPU_Id, int Blocking)</td></tr>
<tr class="memdesc:a82d99e5d2c3904a519d03a588ba9e1d8"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function receives a message from the other processor verifies it's the expected message.  <a href="#a82d99e5d2c3904a519d03a588ba9e1d8">More...</a><br/></td></tr>
<tr class="separator:a82d99e5d2c3904a519d03a588ba9e1d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0a12cf9b983bfbb617226a6f238fcc4e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xmbox__intr__example_8c.html#a0a12cf9b983bfbb617226a6f238fcc4e">MailboxExample_Wait</a> (volatile int *Count, char *Name, int Threshold)</td></tr>
<tr class="memdesc:a0a12cf9b983bfbb617226a6f238fcc4e"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function waits for a particular variable to exceed the threshold value.  <a href="#a0a12cf9b983bfbb617226a6f238fcc4e">More...</a><br/></td></tr>
<tr class="separator:a0a12cf9b983bfbb617226a6f238fcc4e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a840291bc02cba5474a4cb46a9b9566fe"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xmbox__intr__example_8c.html#a840291bc02cba5474a4cb46a9b9566fe">main</a> (void)</td></tr>
<tr class="memdesc:a840291bc02cba5474a4cb46a9b9566fe"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function is the main function for the mailbox interrupt example.  <a href="#a840291bc02cba5474a4cb46a9b9566fe">More...</a><br/></td></tr>
<tr class="separator:a840291bc02cba5474a4cb46a9b9566fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="adf6c143c65ce968f72fc282ec63280e8"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int MailboxExample </td>
          <td>(</td>
          <td class="paramtype">XIntc *&#160;</td>
          <td class="paramname"><em>IntcInstancePtr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">u16&#160;</td>
          <td class="paramname"><em>MboxDeviceId</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">u16&#160;</td>
          <td class="paramname"><em>MboxIntrId</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>This function sends a message to and receives a message from the other processor. </p>
<p>It also uses the interrupt to check whether the other processor has started to send or receive.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">IntcInstancePtr</td><td>is the device instance of the interrupt controller that is being worked on. </td></tr>
    <tr><td class="paramname">MboxDeviceId</td><td>is the Mailbox device ID. </td></tr>
    <tr><td class="paramname">MboxIntrId</td><td>is the Mailbox interrupt ID.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><ul>
<li>XST_SUCCESS if the test passes</li>
<li>XST_FAILURE if the test fails</li>
</ul>
</dd></dl>
<dl class="section note"><dt>Note</dt><dd>None </dd></dl>

<p>References <a class="el" href="struct_x_mbox___config.html#a7a357a3188be88d9aaba7e8cc60960a8">XMbox_Config::BaseAddress</a>, <a class="el" href="struct_x_mbox.html#ada3e15b402bdd502048b69a87dfd70a8">XMbox::Config</a>, <a class="el" href="xmbox__intr__example_8c.html#a82d99e5d2c3904a519d03a588ba9e1d8">MailboxExample_Receive()</a>, <a class="el" href="xmbox__intr__example_8c.html#a8906eefcbf88897e5608bc257daeec6f">MailboxExample_Send()</a>, <a class="el" href="xmbox__intr__example_8c.html#a0a12cf9b983bfbb617226a6f238fcc4e">MailboxExample_Wait()</a>, <a class="el" href="struct_x_mbox___config.html#ae59a7f14795bc768c36b105863e2efc8">XMbox_Config::UseFSL</a>, and <a class="el" href="group__mbox.html#ga34fbeaf8de9092cb4d5b00dfbf054426">XMbox_CfgInitialize()</a>.</p>

<p>Referenced by <a class="el" href="xmbox__intr__example_8c.html#a840291bc02cba5474a4cb46a9b9566fe">main()</a>.</p>

</div>
</div>
<a class="anchor" id="a82d99e5d2c3904a519d03a588ba9e1d8"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int MailboxExample_Receive </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct_x_mbox.html">XMbox</a> *&#160;</td>
          <td class="paramname"><em>MboxInstancePtr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>CPU_Id</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>Blocking</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>This function receives a message from the other processor verifies it's the expected message. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">MboxInstancePtr</td><td>is the instance pointer for the <a class="el" href="struct_x_mbox.html" title="The XMbox driver instance data. ">XMbox</a>. </td></tr>
    <tr><td class="paramname">CPU_Id</td><td>is the CPU ID for the program that is running on.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><ul>
<li>XST_SUCCESS if the receive succeeds</li>
<li>XST_FAILURE if the receive fails</li>
</ul>
</dd></dl>
<dl class="section note"><dt>Note</dt><dd>None </dd></dl>

<p>References <a class="el" href="group__mbox.html#gaa1f68405027d147c68aa53bcb49fbd5a">XMbox_Read()</a>, and <a class="el" href="group__mbox.html#gab14511b623c1d3c191cdc441b8909006">XMbox_ReadBlocking()</a>.</p>

<p>Referenced by <a class="el" href="xmbox__intr__example_8c.html#adf6c143c65ce968f72fc282ec63280e8">MailboxExample()</a>.</p>

</div>
</div>
<a class="anchor" id="a8906eefcbf88897e5608bc257daeec6f"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int MailboxExample_Send </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct_x_mbox.html">XMbox</a> *&#160;</td>
          <td class="paramname"><em>MboxInstancePtr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>CPU_Id</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>Blocking</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>This function sends the hello message to the other processor. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">MboxInstancePtr</td><td>is the instance pointer for the <a class="el" href="struct_x_mbox.html" title="The XMbox driver instance data. ">XMbox</a>. </td></tr>
    <tr><td class="paramname">CPU_Id</td><td>is the CPU ID for the program that is running on. </td></tr>
    <tr><td class="paramname">Blocking</td><td>is set to 1 for the send to block till the data is sent.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><ul>
<li>XST_SUCCESS if the send succeeds</li>
<li>XST_FAILURE if the send fails</li>
</ul>
</dd></dl>
<dl class="section note"><dt>Note</dt><dd>None </dd></dl>

<p>References <a class="el" href="group__mbox.html#ga254c4e5a042e34520c3669fbf9651bc2">XMbox_Write()</a>, and <a class="el" href="group__mbox.html#ga23ee00f97807790770f2dab9b2ea3b0e">XMbox_WriteBlocking()</a>.</p>

<p>Referenced by <a class="el" href="xmbox__intr__example_8c.html#adf6c143c65ce968f72fc282ec63280e8">MailboxExample()</a>.</p>

</div>
</div>
<a class="anchor" id="a0a12cf9b983bfbb617226a6f238fcc4e"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int MailboxExample_Wait </td>
          <td>(</td>
          <td class="paramtype">volatile int *&#160;</td>
          <td class="paramname"><em>Count</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>Name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>Threshold</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>This function waits for a particular variable to exceed the threshold value. </p>
<p>If it waits too long, it will time out and returns XST_FAILURE.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">Count</td><td>is the pointer to the variable to be examined. </td></tr>
    <tr><td class="paramname">Name</td><td>is the name of the variable. </td></tr>
    <tr><td class="paramname">Threshold</td><td>is the threshold value to be exceeded.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><ul>
<li>XST_SUCCESS if the examined variable exceeds the threshold value.</li>
<li>XST_FAILURE if the wait times out.</li>
</ul>
</dd></dl>
<dl class="section note"><dt>Note</dt><dd>None </dd></dl>

<p>Referenced by <a class="el" href="xmbox__intr__example_8c.html#adf6c143c65ce968f72fc282ec63280e8">MailboxExample()</a>.</p>

</div>
</div>
<a class="anchor" id="a840291bc02cba5474a4cb46a9b9566fe"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int main </td>
          <td>(</td>
          <td class="paramtype">void&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>This function is the main function for the mailbox interrupt example. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">None</td><td></td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>XST_SUCCESS if successful, XST_FAILURE if unsuccessful</dd></dl>
<dl class="section note"><dt>Note</dt><dd>None </dd></dl>

<p>References <a class="el" href="xmbox__intr__example_8c.html#adf6c143c65ce968f72fc282ec63280e8">MailboxExample()</a>.</p>

</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
	<p class="footer">&copy; Copyright 2015-2022 Xilinx, Inc. All Rights Reserved.</p>
	<p class="footer">&copy; Copyright 2022-2023 Advanced Micro Devices, Inc. All Rights Reserved.</p>
</div>
</body>
</html>
